package com.example.library_common.utils.decoration;

import android.graphics.Rect;
import android.view.View;

import androidx.recyclerview.widget.RecyclerView;

import com.example.library_common.adapter.multi.JssNewMultipleAdapter;

public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {

    private int spanCount; //列数
    private int spacing; //间隔
    private boolean includeEdge; //是否包含边缘

    public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
        this.spanCount = spanCount;
        this.spacing = spacing;
        this.includeEdge = includeEdge;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {

        //这里是关键，需要根据你有几列来判断
        int position = parent.getChildAdapterPosition(view); // item position
        int column = position % spanCount; // item column

        if (includeEdge) {

            int spanSize = 1;

            RecyclerView.Adapter adapter = parent.getAdapter();

            if (adapter instanceof JssNewMultipleAdapter) {

                if (((JssNewMultipleAdapter) adapter).getData().size() > position && position >= 0) {

                    Object item = ((JssNewMultipleAdapter) adapter).getItem(position);

                    if (item instanceof SpanSize) {

                        spanSize = ((SpanSize) item).getSpanSize();
                    }
                }

            }

            // spacing - column * ((1f / spanCount) * spacing)
            outRect.left = spacing - column * spacing / spanCount;

            // (column + 1) * ((1f / spanCount) * spacing)
            outRect.right = (column + 1) * spacing / spanCount;

            if (spanSize == spanCount) {
                outRect.left = 0;
                outRect.right = 0;

            }

            // item bottom
            outRect.bottom = spacing / 2;

            // top edge
            if (position < spanCount) {
                outRect.top = spacing / 2;

                if (position == 0) {
                    outRect.top = spacing;
                }
            }

        } else {
            outRect.left = column * spacing / spanCount; // column * ((1f / spanCount) * spacing)
            outRect.right = spacing - (column + 1) * spacing / spanCount; // spacing - (column + 1) * ((1f /    spanCount) * spacing)
            if (position >= spanCount) {
                outRect.top = spacing; // item top
            }
        }
    }
}